package com.shm.jinsanyu;

import com.shm.toOffer.MirrorTree;

import java.util.Scanner;

/**
 * 子树的权重
 * 时间限制： 3000MS
 * 内存限制： 589824KB
 * 题目描述：
 * 首先按照从上到下、从左到右的顺序输入一棵满二叉树中每一个结点对应的权重，例如输入1、1、2表示二叉树的根结点的权重为1，它的左、右两个子节点的权重分别为1和2。
 *
 * 然后判断该满二叉树中是否存在这样的非叶子结点：它的左子树上所有结点的权重之和等于右子树上所有结点的权重之和。
 *
 * 现在给你一棵满二叉树的所有结点的权重，请编写一个程序，寻找是否存在满足要求的非叶子结点，如果存在输出“Yes”，否则输出“No”。
 *
 *
 *
 * 输入描述
 * 多组输入。
 *
 * 第1行输入一个正整数T表示测试数据的数量。(T<=100)
 *
 * 接下来T行对应T组输入，每组输入数据占一行，该行包含n个正整数（n满足2^k-1），两两之间用空格隔开，1<n<=1000。
 *
 * 输出描述
 * 对于每组输入数据，如果能够找到满足要求的非叶子结点（左子树上所有结点的权重之和等于右子树上所有结点的权重之和），输出“Yes”，否则输出“No”。
 *
 *
 * 样例输入
 * 3
 * 1 2 2 1 2 1 2
 * 1 2 2 1 3 2 2
 * 1 2 2 1 2 1 3
 * 样例输出
 * Yes
 * Yes
 * No
 */
public class Main {
    static boolean flag = false;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int i = Integer.parseInt(s);
        for (int j = 0; j < i; j++) {
            String str = sc.nextLine();
            TreeNode node = arrayToTree(str, 0);
            traverse(node);
            if (flag) {
                System.out.println("Yes");
            }else {
                System.out.println("No");
            }
        }
    }

    public static int traverse(TreeNode  node){
        if (node==null){
            return 0;
        }
        int left = traverse(node.left);
        int right = traverse(node.right);

        if (node.left!=null&&node.right!=null&&left==right){
            flag = true;
        }
        return left+right+node.val;
    }

    static TreeNode arrayToTree(String str,int i){
        TreeNode node = null;
        if (i>=str.length()||str.length()==0){
            return node;
        }
        if (i<str.length()){
            node = new TreeNode();
            node.left = arrayToTree(str,2*i+1);
            node.right = arrayToTree(str,2*i+2);
            node.val = Integer.valueOf(str.charAt(i));
        }
        return node;
    }
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(){};
    TreeNode(int x) { val = x; }
}